Web Workers এবং SharedArrayBuffer এর ব্যবহার গাইড ও নোট

Computer Programming - ওয়েবঅ্যাসেম্বলি (WebAssembly) - Multithreading in WebAssembly (মাল্টিথ্রেডিং WebAssembly তে)
281

Web Workers এবং SharedArrayBuffer এর ব্যবহার

Web Workers এবং SharedArrayBuffer দুটি গুরুত্বপূর্ণ প্রযুক্তি যা ওয়েব অ্যাপ্লিকেশনগুলোকে আরও দ্রুত, বহুমুখী এবং পারফরম্যান্স-অপটিমাইজড করতে সাহায্য করে। এই দুটি প্রযুক্তি মূলত JavaScript এ ব্যবহার করা হয় এবং ওয়েব ব্রাউজারে মাল্টি-থ্রেডেড প্রোগ্রামিংকে সমর্থন করে। তারা অ্যাসিনক্রোনাস কাজ সম্পাদনে সাহায্য করে এবং ইউজারের জন্য স্মুথ ও দ্রুত অভিজ্ঞতা প্রদান করে।


১. Web Workers

Web Workers হল একটি JavaScript API যা ওয়েব পেজের বাইরের থ্রেডে কোড রান করার ক্ষমতা দেয়। এর মাধ্যমে, JavaScript থ্রেডের সাথে পেজের UI থ্রেড আলাদা রাখা যায়, যার ফলে UI থ্রেড ব্লক না হয়ে একাধিক কাজ একসাথে করা যায়। এটি ওয়েব অ্যাপ্লিকেশনগুলিকে দ্রুত এবং প্রতিক্রিয়া প্রদানকারী (responsive) বানানোর জন্য বিশেষভাবে উপকারী।

১.১ Web Workers এর ব্যবহার

Web Workers প্রধানত দীর্ঘ-running প্রসেস বা ভারী গাণিতিক কাজ সম্পাদন করতে ব্যবহৃত হয় যা থ্রেডের মাধ্যমে UI থ্রেডকে ব্লক করে না। যেমন, ডেটা প্রক্রিয়াকরণ, ফাইল হ্যান্ডলিং, বা ওয়েব সার্ভার থেকে ডেটা ফেচিং ইত্যাদি।

এটি কীভাবে কাজ করে?

  • Web Worker মূল থ্রেড থেকে আলাদা একটি থ্রেডে কোড রান করে।
  • Worker থ্রেড থেকে ডেটা ওয়েব পেজে আসবে postMessage মাধ্যমে।
  • postMessage ব্যবহার করে Worker থ্রেডে ডেটা পাঠানো যায় এবং Worker থ্রেড থেকে ডেটা নেয়া যায়।

উদাহরণ:

// Worker.js (নতুন Worker তৈরি)
self.onmessage = function(event) {
  const data = event.data;
  let result = 0;
  
  // ভারী গণনা (এটা শুধুমাত্র উদাহরণ)
  for (let i = 0; i < data.number; i++) {
    result += i;
  }
  
  // ফলাফল মূল থ্রেডে পাঠানো
  postMessage(result);
}
// Main.js (Worker থ্রেডে কোড পাঠানো)
const worker = new Worker('worker.js');
worker.onmessage = function(event) {
  console.log('Result from worker:', event.data);
}

worker.postMessage({ number: 100000 }); // Worker কে কাজ পাঠানো

এখানে, worker.js ফাইলটি একটি worker থ্রেড তৈরি করে এবং সেখানে একটি ভারী গাণিতিক কাজ সম্পাদন করছে, যেমন ১০০,০০০ পর্যন্ত সংখ্যাগুলোর যোগফল গণনা। মূল থ্রেড থেকে postMessage মাধ্যমে ডেটা পাঠানো হয় এবং Worker থ্রেড ফলাফলটি পাঠিয়ে দেয়।

Web Workers এর সুবিধা:

  • UI Thread Blocking Avoidance: দীর্ঘ-running কাজ UI থ্রেডকে ব্লক করে না।
  • Asynchronous Execution: ওয়েব পেজের UI এবং অন্যান্য কার্যাবলী থ্রেডে চলতে থাকে।
  • Parallel Processing: একাধিক ওয়র্কারের মাধ্যমে কাজের দ্রুত সমাধান করা সম্ভব।

Web Workers এর সীমাবদ্ধতা:

  • Worker থেকে DOM অ্যাক্সেস করা যায় না। এটি শুধুমাত্র লজিক এবং গাণিতিক কাজের জন্য উপকারী।
  • থ্রেডের মধ্যে ডেটা শেয়ারিং সীমিত এবং মূলত কপি করা হয় (message-passing mechanism)।

২. SharedArrayBuffer

SharedArrayBuffer হল একটি জাভাস্ক্রিপ্ট অবজেক্ট যা একাধিক থ্রেডের মধ্যে ডেটা শেয়ার করার জন্য ব্যবহৃত হয়। এটি Web Workers এর সাথে ব্যবহার করা হয়, যেখানে ডেটা একাধিক থ্রেডে ভাগ করে কাজ করা হয়। SharedArrayBuffer মেমোরি শেয়ারিংয়ের জন্য ব্যবহৃত হয় এবং একাধিক থ্রেড একই ডেটা অ্যাক্সেস করতে পারে।

২.১ SharedArrayBuffer এর ব্যবহার

SharedArrayBuffer প্রধানত মাল্টি-থ্রেডেড অ্যাপ্লিকেশনে ব্যবহার হয় যেখানে একাধিক থ্রেড একই ডেটা অ্যাক্সেস করবে এবং আপডেট করবে। এটি বিশেষভাবে উপকারী যখন আপনি ডেটাকে ফ্ল্যাগ, কাউন্ট, বা সিঙ্ক্রোনাইজ করতে চান।

উদাহরণ:

// Main Thread: Shared Array Buffer তৈরি
const sharedBuffer = new SharedArrayBuffer(1024); // 1 KB মেমোরি
const view = new Int32Array(sharedBuffer);

// Web Worker তৈরি করা
const worker = new Worker('worker.js');
worker.postMessage(sharedBuffer); // SharedArrayBuffer Worker এ পাঠানো
// Worker.js: Shared Array Buffer ব্যবহার
onmessage = function(event) {
  const sharedBuffer = event.data;
  const view = new Int32Array(sharedBuffer);

  // ডেটা আপডেট
  view[0] = 100;
  console.log('Updated value in worker:', view[0]);
}

এখানে:

  • SharedArrayBuffer ব্যবহার করে আমরা মূল থ্রেড এবং Worker থ্রেডের মধ্যে মেমোরি শেয়ার করছি।
  • Int32Array হল টাইপড অ্যারে, যা নির্দিষ্ট মেমোরি সেলগুলো অ্যাক্সেস করতে ব্যবহৃত হয়।
  • Worker থ্রেড মেমোরির মধ্যে ডেটা আপডেট করতে পারবে এবং মূল থ্রেড এই পরিবর্তন দেখতে পারবে।

SharedArrayBuffer এর সুবিধা:

  • Shared Memory: একাধিক থ্রেডের মধ্যে ডেটা শেয়ার করার জন্য এটা খুবই কার্যকরী।
  • Atomic Operations: এটি অ্যাটমিক অপারেশন সমর্থন করে, যেমন ওয়র্কারের মধ্যে ডেটার সমন্বয় ঘটানো।
  • Efficient Parallel Processing: পারফরম্যান্স-সেন্ট্রিক মাল্টি-থ্রেডেড প্রসেসিংয়ের জন্য উপকারী।

SharedArrayBuffer এর সীমাবদ্ধতা:

  • এটি একটি নিরাপদ পরিবেশে চালানো প্রয়োজন, যেমন সাইড চ্যানেল আক্রমণের বিরুদ্ধে সুরক্ষা।
  • সঠিকভাবে সিঙ্ক্রোনাইজেশন না হলে, ডেটা কনফ্লিক্ট এবং ভুল ফলাফল আসতে পারে।

৩. Web Workers এবং SharedArrayBuffer এর একসাথে ব্যবহার

Web Workers এবং SharedArrayBuffer একসাথে ব্যবহার করলে মাল্টি-থ্রেডেড প্রসেসিং আরও দক্ষ হয়, কারণ বিভিন্ন থ্রেড একই মেমোরি স্পেসে ডেটা শেয়ার করে দ্রুত পারফরম্যান্স অর্জন করতে পারে।

উদাহরণ:

// Main.js (SharedArrayBuffer তৈরি করা এবং Worker এ পাঠানো)
const sharedBuffer = new SharedArrayBuffer(1024); 
const view = new Int32Array(sharedBuffer);

// মেমোরি ফিল আপ করা
for (let i = 0; i < 256; i++) {
  view[i] = i;
}

const worker = new Worker('worker.js');
worker.postMessage(sharedBuffer); // Worker এ SharedArrayBuffer পাঠানো
// Worker.js (SharedArrayBuffer ব্যবহার)
onmessage = function(event) {
  const sharedBuffer = event.data;
  const view = new Int32Array(sharedBuffer);

  // Shared memory থেকে ডেটা অ্যাক্সেস করা
  console.log('Shared data in worker:', view[0]); // ডেটার প্রথম ইনডেক্স দেখাবে
}

এখানে, SharedArrayBuffer ব্যবহার করে ডেটা একটি কমন মেমোরিতে রাখা হচ্ছে এবং সেটা Worker থ্রেডে অ্যাক্সেস করা হচ্ছে।


সারসংক্ষেপ

Web Workers এবং SharedArrayBuffer একটি অ্যাপ্লিকেশনকে মাল্টি-থ্রেডেড ও প্যারালাল প্রক্রেসিং সক্ষম করে।

  • Web Workers ব্যবহার করলে কোডের এক্সিকিউশন UI থ্রেড থেকে আলাদা করা যায়, যাতে ওয়েব পেজ দ্রুত ও প্রতিক্রিয়া প্রদানকারী থাকে।
  • SharedArrayBuffer একাধিক থ্রেডকে একই ডেটা শেয়ার করতে সাহায্য করে, যা বিশেষ করে উচ্চ পারফরম্যান্স ও ডেটা প্রসেসিং অ্যাপ্লিকেশনের জন্য উপকারী।

এই দুটি প্রযুক্তি একত্রে ব্যবহার করে আপনি ওয়েব অ্যাপ্লিকেশনে দ্রুত, বহুমুখী এবং পারফরম্যান্স-অপটিমাইজড কোড তৈরি করতে পারবেন।

Content added By
Promotion

Are you sure to start over?

Loading...